#ifndef __Device_hpp__
#define __Device_hpp__

#include "Keyboard.hpp"
#include "Mouse.hpp"
#include "Window.hpp"
#include "Display.hpp"
#include "FileSystem.hpp"

namespace ge {

GE_DECLARE_CLASS( Device );
//GE_DECLARE_CLASS( Keyboard );
//GE_DECLARE_CLASS( Mouse );
//GE_DECLARE_CLASS( Window );
//GE_DECLARE_CLASS( Display );

//----------------------------------------------------------------------------//
// Device
//----------------------------------------------------------------------------//

class Device : public virtual ReferenceCounted, public Singleton< Device >
{
 
 friend class Window;
 friend class Hook;

 public:

 protected:

     Device( void );

     virtual ~Device( void );

     struct Hook;

     static void* _GetCallback( void );

     bool _HandleOsEvent( OsEvent& _event );

     FileSystemPtr m_filesystem;
     KeyboardPtr m_keyboard;
     MousePtr m_mouse;
     WindowPtr m_window;
     DisplayPtr m_display;
};

} // namespace ge

#endif//__Device_hpp__
